/*
 * @(#)Nodes.java 1.50 04/04/14
 * 
 * Clase Propia
 * PROP Grupo 13 Cluster 3
 */

/**
 * Esta clase se encarga de la lectura y escritura de ficheros
 * 
 * @author David Molins Gom�
 */



package datos;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

import test.Testing;
import dominio.Configuracion;
import dominio.Cost;
import dominio.Graph;
import dominio.Node;
import dominio.Nodes;


public class CtrlDatos {

	public static void main (String[] args){
		//WriteGraph(Testing.GiveMeAGraph(2, 2, 2, 2), "Grafos/Almacenamiento.wop");
		ArrayList<Graph> g = new ArrayList<Graph>();
		for(int i = 0; i < 3; i++) g.add(Testing.GiveMeAGraph(2, 2, 2, i+1));
		WriteGraphCollection(g, "Grafos/Almacenamiento.wop");
		g = ReadGraphCollection("Grafos/Almacenamiento.wop");
		//g.PrintGraph();
		//ArrayList<Node> g = ReadNodeCollection("Grafos/Almacenamiento.wop");
		for(int i = 0; i < g.size(); i++){
			g.get(i).PrintGraph();
		}

	}

	private static CtrlDatos singletonObject;

	public static CtrlDatos getInstance() {
		if (singletonObject == null)
			singletonObject = new CtrlDatos() {
		};
		return singletonObject;
	}

	/** Constructora privada. **/
	public static String GetRutaPorDefectoGraph(){
		File currentDir = new File("Grafos/Almacenamiento.wop");
		return currentDir.getAbsolutePath();
	}

	public static String GetRutaPorDefectoTarea(){
		File currentDir = new File("Listado/Almacenamiento.wop");
		return currentDir.getAbsolutePath();
	}

	public static String GetRutaPorDefectoSubtarea(){
		File currentDir = new File("Listado/Subtareas.wop");
		return currentDir.getAbsolutePath();
	}

	//CONFIGURACION
	public static Configuracion ReadConfiguracion (){	// lee los path de configuracion previamente guardados
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Configuracion config = new Configuracion();

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File ("Config/configuration.txt");  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea

			StringBuffer  strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("pathTareas: ")+12);
			String pathTareas = strf.substring(0, strf.indexOf(";")); // NAMEGRAPH

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("pathGraph: ")+11);
			String pathGraph = strf.substring(0, strf.indexOf(";")); // IDGRAPH

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("pathSubtareas: ")+15);
			String pathSubtareas = strf.substring(0, strf.indexOf(";")); // DESCRIPTIONGRAPH

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("typeAlgorithm: ")+15);
			String typeAlgorithm = strf.substring(0, strf.indexOf(";")); // TYPE ALGORITHM
			boolean typeA = false;
			if(typeAlgorithm.equals("true")) typeA = true;

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("typeOperator: ")+14);
			String typeOperator = strf.substring(0, strf.indexOf(";")); // TYPE ALGORITHM
			boolean typeO = false;
			if(typeOperator.equals("true")) typeO = true;

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("numIterations: ")+15);
			String numIterations = strf.substring(0, strf.indexOf(";")); // ITERACIONES
			int numIt = transformarIteraciones(numIterations);
			double temp = 0;
			double alpha = 0;

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("alfaValue: ")+12);
			String valAlpha = strf.substring(0, strf.indexOf(";")); // ALFA
			alpha = Double.parseDouble(valAlpha);


			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("tempValue: ")+11);
			String valTemp = strf.substring(0, strf.indexOf(";")); // TEMPERATURA
			temp = Double.parseDouble(valTemp);

			linea = br.readLine();
			strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("typeOptimize: ")+14);
			String typeOptimize = strf.substring(0, strf.indexOf(";"));//  OPTIMIZAR
			boolean typeOpt = false;
			if(typeOptimize.equals("true")) typeOpt = true;

			config = new Configuracion(pathTareas, pathGraph, pathSubtareas, typeA, typeO, numIt, alpha, temp, typeOpt);


		}
		catch(Exception e){
			//return retorno = new Graph();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return config;
	}

	public static void WriteConfiguracio(Configuracion config){  // Guarda los path de configuracion
		FileWriter fichero = null;
		PrintWriter pw = null;
		System.out.println("CONTROLADOR DE DATOS");
		try{
			fichero = new FileWriter("Config/configuration.txt");
			pw = new PrintWriter(fichero);
			pw.println("pathTareas: " + config.getPathTareas() + ";");
			pw.println("pathGraph: " + config.getPathGraph() + ";");
			pw.println("pathSubtareas: " + config.getPathSubtareas() + ";");
			String tipo = "true";
			if(!config.getTypeAlgoritmo()) tipo = "false";
			pw.println("typeAlgorithm: " + tipo + ";");
			String operador = "true";
			if(!config.getTypeOperator()) operador = "false";
			pw.println("typeOperator: " + operador + ";");
			pw.println("numIterations: " + config.getIteraciones() + ";");
			pw.println("    alfaValue: " + config.getAlfa() + ";");
			pw.println("    tempValue: " + config.getTemp() + ";");
			String opt = "true";
			if(!config.isOpt()) opt = "false";
			pw.println("typeOptimize: " + opt + ";");


		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	//TAREA
	public static Nodes ReadTarea(String path){  // aixo de entrarli el path s'haur� de decidir i el retorno tmb est� per dicidir

		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Nodes nodes = new Nodes();
		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine();  // leemos la primera linea

			StringBuffer  strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("NameTarea\":\"")+12);
			String NameTarea = strf.substring(0, strf.indexOf("\"")); // NAMETAREA
			strf.delete(0, strf.indexOf("\""));

			strf.delete(0, strf.indexOf("IdTarea\":\"")+10);
			String IdTarea = strf.substring(0, strf.indexOf("\"")); // IDTAREA
			strf.delete(0, strf.indexOf("\""));

			strf.delete(0, strf.indexOf("DescriptionTarea\":\"")+19);
			String DescriptionTarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONTAREA
			strf.delete(0, strf.indexOf("\""));


			nodes = new Nodes(Integer.parseInt(IdTarea), NameTarea, DescriptionTarea);  //Creamos la Tarea!!
			ArrayList<Node> nodelist = new ArrayList<Node>();

			//strf.delete(0, strf.indexOf("MapTarea\":\""));

			linea = br.readLine();
			//System.out.println(linea);

			strf = new StringBuffer(linea);
			while (linea.contains("NameSubtarea")){
				strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
				String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
				String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
				String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("time\":\"") + 7);
				String TimeSubtarea = strf.substring(0, strf.indexOf("\"")); // TimeSubtarea
				strf.delete(0, strf.indexOf("\""));

				Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
				nodelist.add(nodo);
				linea = br.readLine();
				strf = new StringBuffer(linea);
				System.out.println(linea);
			}
			nodes.SetNodelist(nodelist);
		}
		catch(Exception e){
			e.printStackTrace();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return nodes;
	};

	public static void WriteTarea(Nodes nodes, String path){       // teoricamente escribe/ a�ade al fichero la info del graph

		FileWriter fichero = null;
		PrintWriter pw = null;

		try{
			fichero = new FileWriter(path);
			pw = new PrintWriter(fichero);
			pw.println("{\"NameTarea\":\""+nodes.GetName()+"\",\"IdTarea\":\""+nodes.id+"\",\"DescriptionTarea\":\""+nodes.GetDescription()+"\",\"MapTarea\":{");
			for(Integer i = 0; i < nodes.nodelist.size(); i++){  //bucle para ir escribiendo las subtareas
				pw.println("    {\"NameSubtarea\":\""+nodes.nodelist.get(i).GetName()+"\",\"IdSubtarea\":\""+nodes.nodelist.get(i).id+"\",\"DescSubtarea\":\""+nodes.nodelist.get(i).GetDescription()+"\"\"time\":\""+nodes.nodelist.get(i).GetTime()+"\",}");
			}
			pw.println("-}");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

	//CREADORAS
	public Nodes crearTarea(Integer index, String nombre, String descripcion){
		Nodes retorno = new Nodes(index, nombre, descripcion);
		return retorno;
	}

	public Node crearNode(Integer indexnode, String nombre, String descripcion, Integer cost){
		Node retorno = new Node(indexnode, nombre, descripcion, cost);
		return retorno;
	}

	public Graph crearGrafo(Integer id, ArrayList<Nodes> listaTareas, String nombre, String descripcion){
		Graph retorno = new Graph(id, nombre, descripcion, listaTareas);
		return retorno;
	}

	public Graph crearGrafo(ArrayList<Nodes> listaTareas, String nombre, String descripcion){
		Graph retorno = new Graph(nombre, descripcion, listaTareas);
		return retorno;
	}

	//NODES COLLECTION----------Verificado
	public static ArrayList<Nodes> ReadNodesCollection(String path){
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Nodes nodes = new Nodes();
		ArrayList<Nodes> collection = new ArrayList<Nodes>();

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine();  // leemos la primera linea
			while(! linea.isEmpty() && linea.contains("NameTarea")){
				StringBuffer  strf = new StringBuffer(linea);
				strf.delete(0, strf.indexOf("NameTarea\":\"")+12);
				String NameTarea = strf.substring(0, strf.indexOf("\"")); // NAMETAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("IdTarea\":\"")+10);
				String IdTarea = strf.substring(0, strf.indexOf("\"")); // IDTAREA
				IdTarea = "" + collection.size();
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("DescriptionTarea\":\"")+19);
				String DescriptionTarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONTAREA
				strf.delete(0, strf.indexOf("\""));


				nodes = new Nodes(Integer.parseInt(IdTarea), NameTarea, DescriptionTarea);  //Creamos la Tarea!!
				ArrayList<Node> nodelist = new ArrayList<Node>();


				linea = br.readLine();
				//System.out.println(linea);

				strf = new StringBuffer(linea);
				while (linea.contains("NameSubtarea")){
					strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
					String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
					String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
					String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("time\":\"") + 7);
					String TimeSubtarea = strf.substring(0, strf.indexOf("\"")); // TimeSubtarea
					strf.delete(0, strf.indexOf("\""));

					Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
					nodelist.add(nodo);
					linea = br.readLine();
					strf = new StringBuffer(linea);
					//System.out.println(linea);
					//linea = strf.toString();
				}

				////System.out.println(linea);
				nodes.SetNodelist(nodelist);
				collection.add(nodes);
				//System.out.println(linea);
				linea = br.readLine();
				//System.out.println(linea);
				//linea = br.readLine();
				//System.out.println(linea);
				//linea = br.readLine();
				//System.out.println(linea);
			}

		}
		catch(Exception e){
			return collection = new ArrayList<Nodes>();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return collection;
	}

	public static void WriteNodesCollection(ArrayList<Nodes> collection, String path){       // teoricamente escribe/ a�ade al fichero la info del graph
		FileWriter fichero = null;
		PrintWriter pw = null;

		try{
			fichero = new FileWriter(path);
			pw = new PrintWriter(fichero);
			for(Integer l = 0; l < collection.size(); l++){
				Nodes nodes = collection.get(l);
				pw.println("{\"NameTarea\":\""+nodes.GetName()+"\",\"IdTarea\":\""+nodes.id+"\",\"DescriptionTarea\":\""+nodes.GetDescription()+"\",\"MapTarea\":{");
				//pw.println("{\"CostsTarea\":");
				/*String costesTarea = new String();
				for(Integer i = 0; i < nodes.costs.size(); i++){
					costesTarea = costesTarea+"{\"id\":"+ nodes.costs.get(i).GetId() +",\"coste\":"+ nodes.costs.get(i).GetCost()+"},";
				}
				pw.println("{" + costesTarea + "}");*/

				for(Integer i = 0; i < nodes.nodelist.size(); i++){  //bucle para ir escribiendo las subtareas
					pw.println("    {\"NameSubtarea\":\""+nodes.nodelist.get(i).GetName()+"\",\"IdSubtarea\":\""+nodes.nodelist.get(i).id+"\",\"DescSubtarea\":\""+nodes.nodelist.get(i).GetDescription()+"\"\"time\":\""+nodes.nodelist.get(i).GetTime()+"\",}");
				}
				//pw.println("    {\"Cost\":");
				/*for(Integer i = 0; i < nodes.nodelist.size(); i++){
					String CostesSubTarea = new String();
					for(Integer j = 0; j < nodes.costs.size(); j++){
						CostesSubTarea = CostesSubTarea+"{\"id\":"+ nodes.GetNodelist().get(i).GetCosts().get(j).GetId() +",\"coste\":"+ nodes.GetNodelist().get(i).GetCosts().get(j).GetCost()+"},";
					}
					pw.println("        {" + CostesSubTarea+ "}");
				}*/
				//pw.println("    }");
				//pw.println("}}");
				pw.println("-}");
			}
			pw.println("-}");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

	public Boolean ExistThisNodes(Nodes muestra, String path){
		Boolean bandera = false;
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Nodes nodes = new Nodes();
		ArrayList<Nodes> collection = new ArrayList<Nodes>();

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine();  // leemos la primera linea
			while(! linea.isEmpty() && linea.contains("NameTarea")){
				ArrayList<Node> deflist = new ArrayList<Node>();

				StringBuffer  strf = new StringBuffer(linea);
				strf.delete(0, strf.indexOf("NameTarea\":\"")+12);
				String NameTarea = strf.substring(0, strf.indexOf("\"")); // NAMETAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("IdTarea\":\"")+10);
				String IdTarea = strf.substring(0, strf.indexOf("\"")); // IDTAREA
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("DescriptionTarea\":\"")+19);
				String DescriptionTarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONTAREA
				strf.delete(0, strf.indexOf("\""));


				nodes = new Nodes(Integer.parseInt(IdTarea), NameTarea, DescriptionTarea);  //Creamos la Tarea!!
				if(nodes.GetName() == muestra.GetName()){
					bandera = true;
					break;
				}

				ArrayList<Node> nodelist = new ArrayList<Node>();


				linea = br.readLine();
				if(linea.contains("CostsTarea")){
					linea = br.readLine();
					strf = new StringBuffer(linea);
					ArrayList<Cost> costees = new ArrayList<Cost>();
					while (linea.contains("id")){
						strf.delete(0, strf.indexOf("id\":")+4);
						String costid = strf.substring(0, strf.indexOf(","));// COST.ID
						strf.delete(0, strf.indexOf(","));
						////System.out.println(costid);

						strf.delete(0, strf.indexOf("coste\":")+7);
						String costcost = strf.substring(0, strf.indexOf("}"));   //COST.COST
						strf.delete(0, strf.indexOf("}"));
						////System.out.println(costcost);

						Cost c = new Cost(Integer.parseInt(costid), Integer.parseInt(costcost));
						costees.add(c);  // anadimos el coste al arraylist de costes

						linea = strf.toString();
					}
					nodes.SetCosts(costees);
					//nodes.PrintNodes();
				}

				linea = br.readLine();
				////System.out.println(linea);

				Integer counter = 0;
				strf = new StringBuffer(linea);
				while (linea.contains("NameSubtarea")){
					strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
					String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
					String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
					String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("time\":\"") + 7);
					String TimeSubtarea = strf.substring(0, strf.indexOf("\"")); // TimeSubtarea
					strf.delete(0, strf.indexOf("\""));

					Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
					nodelist.add(nodo);
					linea = br.readLine();
					strf = new StringBuffer(linea);
					linea = strf.toString();
					counter++; // actualixamos el contador para saber cuantas subtareas tenemos
				}

				////System.out.println(linea);
				Integer aux = 1;
				while(linea.contains("Cost")){
					while (aux <= counter){
						ArrayList<Cost> costs = new ArrayList<Cost>();
						linea = br.readLine();
						////System.out.println(linea);
						strf = new StringBuffer(linea);
						Integer aux2 = 1;
						while (aux2 <= counter){

							strf.delete(0, strf.indexOf("id\":")+4);
							String stringid = strf.substring(0, strf.indexOf(","));// COST.ID
							strf.delete(0, strf.indexOf(","));
							////System.out.println(stringid);

							strf.delete(0, strf.indexOf("coste\":")+7);
							String stringcoste = strf.substring(0, strf.indexOf("}"));   //COST.COST
							strf.delete(0, strf.indexOf("}"));
							////System.out.println(stringcoste);


							Cost coste = new Cost(Integer.parseInt(stringid), Integer.parseInt(stringcoste));
							costs.add(coste);
							////System.out.println(aux2 + "<" + counter);
							aux2++; // PER CONFIRMAR

						}
						////System.out.println("BREAK");
						Node paradef = nodelist.get(aux-1);
						paradef.SetCosts(costs);
						deflist.add(paradef);
						aux++;
					}
					linea = strf.toString();
				}
				nodes.SetNodelist(deflist);
				collection.add(nodes);
				//System.out.println(linea);
				linea = br.readLine();
				//System.out.println(linea);
				linea = br.readLine();
				//System.out.println(linea);
				linea = br.readLine();
				//System.out.println(linea);
			}

		}
		catch(Exception e){
			e.printStackTrace();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return bandera;
	}

	//GRAPH-----Verificado
	public static Graph ReadGraph(String path){
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Nodes nodes = new Nodes();
		ArrayList<Nodes> collection = new ArrayList<Nodes>();
		Graph retorno = new Graph(1);

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea

			StringBuffer  strf = new StringBuffer(linea);
			strf.delete(0, strf.indexOf("NameGraph\":\"")+12);
			String NameGraph = strf.substring(0, strf.indexOf("\"")); // NAMEGRAPH
			strf.delete(0, strf.indexOf("\""));

			strf.delete(0, strf.indexOf("IdGraph\":\"")+10);
			String IdGraph = strf.substring(0, strf.indexOf("\"")); // IDGRAPH
			strf.delete(0, strf.indexOf("\""));

			strf.delete(0, strf.indexOf("DescriptionGraph\":\"")+19);
			String DescriptionGraph = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONGRAPH
			strf.delete(0, strf.indexOf("\""));

			retorno = new Graph(Integer.parseInt(IdGraph), NameGraph, DescriptionGraph, collection); // creamos el graph!! 

			linea = br.readLine();

			while(! linea.isEmpty() && linea.contains("NameTarea")){
				strf = new StringBuffer(linea);
				//System.out.println(linea);
				strf.delete(0, strf.indexOf("NameTarea\":\"")+12);
				//System.out.println("[1]"+strf.toString());
				String NameTarea = strf.substring(0, strf.indexOf("\"")); // NAMETAREA
				//System.out.println("[2]"+NameTarea);
				strf.delete(0, strf.indexOf("\""));
				//System.out.println("[3]"+strf.toString());

				strf.delete(0, strf.indexOf("IdTarea\":\"")+10);
				String IdTarea = strf.substring(0, strf.indexOf("\"")); // IDTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println("[4]"+strf.toString());

				strf.delete(0, strf.indexOf("DescriptionTarea\":\"")+19);
				String DescriptionTarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println("[5]"+strf.toString());


				nodes = new Nodes(Integer.parseInt(IdTarea), NameTarea, DescriptionTarea);  //Creamos la Tarea!!
				ArrayList<Node> nodelist = new ArrayList<Node>();

				linea = br.readLine();
				////System.out.println(linea);

				strf = new StringBuffer(linea);
				while (linea.contains("NameSubtarea")){
					strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
					String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
					String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
					String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
					strf.delete(0, strf.indexOf("\""));

					strf.delete(0, strf.indexOf("time\":\"") + 7);
					String TimeSubtarea = strf.substring(0, strf.indexOf("\"")); // TimeSubtarea
					strf.delete(0, strf.indexOf("\""));

					Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea)); // Creamos la Subtarea
					//nodo.PrintNode();
					nodelist.add(nodo); // la a�adimos al arraylist de Subtareas
					linea = br.readLine();
					strf = new StringBuffer(linea);
				}


				nodes.SetNodelist(nodelist);
				collection.add(nodes);
				////System.out.println("[6]"+linea);
				//linea = br.readLine();
				//System.out.println("[7]"+linea);
				//linea = br.readLine();
				////System.out.println("[8]"+linea);
				//linea = br.readLine();
				////System.out.println("[9]"+linea);
			}

		}
		catch(Exception e){
			return retorno = new Graph(collection);
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		retorno.SetList(collection);
		return retorno;
	}

	public static void WriteGraph(Graph grafo, String path){
		FileWriter fichero = null;
		PrintWriter pw = null;

		try{
			fichero = new FileWriter(path);
			pw = new PrintWriter(fichero);

			pw.println("{\"NameGraph\":\""+grafo.GetName()+"\",\"IdGraph\":\""+grafo.id+"\",\"DescriptionGraph\":\""+grafo.GetDescription()+"\", \"ListGraph\":");
			ArrayList<Nodes> collection = grafo.list;
			for(Integer l = 0; l < collection.size(); l++){
				Nodes nodes = collection.get(l);
				pw.println("{\"NameTarea\":\""+nodes.GetName()+"\",\"IdTarea\":\""+nodes.id+"\",\"DescriptionTarea\":\""+nodes.GetDescription()+"\",\"MapTarea\":{");
				/*pw.println("{\"CostsTarea\":");
				String costesTarea = new String();
				for(Integer i = 0; i < nodes.costs.size(); i++){
					costesTarea = costesTarea+"{\"id\":"+ nodes.costs.get(i).GetId() +",\"coste\":"+ nodes.costs.get(i).GetCost()+"},";
				}
				pw.println("{" + costesTarea + "}");*/

				for(Integer i = 0; i < nodes.nodelist.size(); i++){  //bucle para ir escribiendo las subtareas
					pw.println("    {\"NameSubtarea\":\""+nodes.nodelist.get(i).GetName()+"\",\"IdSubtarea\":\""+nodes.nodelist.get(i).id+"\",\"DescSubtarea\":\""+nodes.nodelist.get(i).GetDescription()+"\"\"time\":\""+nodes.nodelist.get(i).GetTime()+"\",}");
				}
				/*pw.println("    {\"Cost\":");
				for(Integer i = 0; i < nodes.nodelist.size(); i++){
					String CostesSubTarea = new String();
					for(Integer j = 0; j < nodes.costs.size(); j++){
						CostesSubTarea = CostesSubTarea+"{\"id\":"+ nodes.GetNodelist().get(i).GetCosts().get(j).GetId() +",\"coste\":"+ nodes.GetNodelist().get(i).GetCosts().get(j).GetCost()+"},";
					}
					pw.println("        {" + CostesSubTarea+ "}");
				}
				pw.println("    }");
				pw.println("}}");*/
			}
			pw.println("-}");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

	//NODE COLLECTION -------Verificado
	public static ArrayList<Node> ReadNodeCollection(String path){
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		ArrayList<Node> collection = new ArrayList<Node>();


		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea

			StringBuffer  strf = new StringBuffer(linea);
			//System.out.println(linea);
			while (linea.contains("NameSubtarea")){
				strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
				String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(NameSubtarea);

				strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
				String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
				IdSubtarea = ""+collection.size();
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(IdSubtarea);

				strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
				String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(DescSubtarea);

				strf.delete(0, strf.indexOf("time\":") + 6);
				String TimeSubtarea = strf.substring(0, strf.indexOf("}")); // TimeSubtarea
				strf.delete(0, strf.indexOf("}"));
				//System.out.println(TimeSubtarea);

				Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
				collection.add(nodo);
				linea = br.readLine();
				//System.out.println(linea);
				strf = new StringBuffer(linea);
			}
		}
		catch(Exception e){
			return collection= new ArrayList<Node>();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return collection;

	}

	public static void WriteNodeCollection(ArrayList<Node> collection, String path){
		FileWriter fichero = null;
		PrintWriter pw = null;

		try{
			fichero = new FileWriter(path);
			pw = new PrintWriter(fichero);
			for(Integer l = 0; l < collection.size(); l++){
				Node nodes = collection.get(l); // es un poco lioso pero la variable es L y no 1
				pw.println("{\"NameSubtarea\":\""+nodes.GetName()+"\",\"IdSubtarea\":\""+nodes.id+"\",\"DescSubtarea\":\""+nodes.GetDescription()+"\",\"time\":"+nodes.GetTime()+"}");
			}
			pw.println("-}");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

	public static Node ReadNode(String path){
		Node nodo = new Node();
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;


		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea
			StringBuffer  strf = new StringBuffer(linea);

			strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
			String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
			strf.delete(0, strf.indexOf("\""));
			//System.out.println(NameSubtarea);

			strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
			String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
			strf.delete(0, strf.indexOf("\""));
			//System.out.println(IdSubtarea);

			strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
			String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
			strf.delete(0, strf.indexOf("\""));
			//System.out.println(DescSubtarea);

			strf.delete(0, strf.indexOf("time\":") + 6);
			String TimeSubtarea = strf.substring(0, strf.indexOf("}")); // TimeSubtarea
			strf.delete(0, strf.indexOf("}"));
			//System.out.println(TimeSubtarea);

			nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
		}

		catch(Exception e){

		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return nodo;
	}

	public Boolean ExistsThisNode(Node muestra, String path){
		Boolean bandera = false;
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea

			StringBuffer  strf = new StringBuffer(linea);
			//System.out.println(linea);
			while (linea.contains("NameSubtarea")){
				strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
				String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(NameSubtarea);

				strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
				String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(IdSubtarea);

				strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
				String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
				strf.delete(0, strf.indexOf("\""));
				//System.out.println(DescSubtarea);

				strf.delete(0, strf.indexOf("time\":") + 6);
				String TimeSubtarea = strf.substring(0, strf.indexOf("}")); // TimeSubtarea
				strf.delete(0, strf.indexOf("}"));
				//System.out.println(TimeSubtarea);

				Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea));
				linea = br.readLine();
				//System.out.println(linea);
				strf = new StringBuffer(linea);

				if(nodo.GetName() == muestra.GetName()){
					bandera = true;
					break;
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return bandera;

	}

	//GRAPH COLLECTION ------------Verificado
	public static ArrayList<Graph> ReadGraphCollection(String path){
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;
		Nodes nodes = new Nodes();

		ArrayList<Graph> clai = new ArrayList<Graph>();
		Graph retorno = new Graph(1);

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (path);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea

			while(! linea.isEmpty() && linea.contains("NameGraph")){
				ArrayList<Nodes> collection = new ArrayList<Nodes>();


				StringBuffer  strf = new StringBuffer(linea);
				strf.delete(0, strf.indexOf("NameGraph\":\"")+12);
				String NameGraph = strf.substring(0, strf.indexOf("\"")); // NAMEGRAPH
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("IdGraph\":\"")+10);
				String IdGraph = strf.substring(0, strf.indexOf("\"")); // IDGRAPH
				strf.delete(0, strf.indexOf("\""));

				strf.delete(0, strf.indexOf("DescriptionGraph\":\"")+19);
				String DescriptionGraph = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONGRAPH
				strf.delete(0, strf.indexOf("\""));

				retorno = new Graph(Integer.parseInt(IdGraph), NameGraph, DescriptionGraph, collection); // creamos el graph!! 

				linea = br.readLine();

				while(! linea.isEmpty() && linea.contains("NameTarea")){
					strf = new StringBuffer(linea);
					//System.out.println(linea);
					strf.delete(0, strf.indexOf("NameTarea\":\"")+12);
					//System.out.println("[1]"+strf.toString());
					String NameTarea = strf.substring(0, strf.indexOf("\"")); // NAMETAREA
					//System.out.println("[2]"+NameTarea);
					strf.delete(0, strf.indexOf("\""));
					//System.out.println("[3]"+strf.toString());

					strf.delete(0, strf.indexOf("IdTarea\":\"")+10);
					String IdTarea = strf.substring(0, strf.indexOf("\"")); // IDTAREA
					strf.delete(0, strf.indexOf("\""));
					//System.out.println("[4]"+strf.toString());

					strf.delete(0, strf.indexOf("DescriptionTarea\":\"")+19);
					String DescriptionTarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONTAREA
					strf.delete(0, strf.indexOf("\""));
					//System.out.println("[5]"+strf.toString());


					nodes = new Nodes(Integer.parseInt(IdTarea), NameTarea, DescriptionTarea);  //Creamos la Tarea!!
					ArrayList<Node> nodelist = new ArrayList<Node>();

					linea = br.readLine();
					////System.out.println(linea);

					strf = new StringBuffer(linea);
					while (linea.contains("NameSubtarea")){
						strf.delete(0, strf.indexOf("NameSubtarea\":\"") + 15);
						String NameSubtarea = strf.substring(0, strf.indexOf("\"")); // NAMESUBTAREA
						strf.delete(0, strf.indexOf("\""));

						strf.delete(0, strf.indexOf("IdSubtarea\":\"") + 13);
						String IdSubtarea = strf.substring(0, strf.indexOf("\"")); // IDSUBTAREA
						strf.delete(0, strf.indexOf("\""));

						strf.delete(0, strf.indexOf("DescSubtarea\":\"") + 15);
						String DescSubtarea = strf.substring(0, strf.indexOf("\"")); // DESCRIPTIONSUBTAREA
						strf.delete(0, strf.indexOf("\""));

						strf.delete(0, strf.indexOf("time\":\"") + 7);
						String TimeSubtarea = strf.substring(0, strf.indexOf("\"")); // TimeSubtarea
						strf.delete(0, strf.indexOf("\""));

						Node nodo = new Node(Integer.parseInt(IdSubtarea), NameSubtarea, DescSubtarea, Integer.parseInt(TimeSubtarea)); // Creamos la Subtarea
						//nodo.PrintNode();
						nodelist.add(nodo); // la a�adimos al arraylist de Subtareas
						linea = br.readLine();
						strf = new StringBuffer(linea);
					}


					nodes.SetNodelist(nodelist);
					collection.add(nodes);

				}
				//linea = br.readLine();
				retorno.SetList(collection);
				clai.add(retorno);
			}

		}
		catch(Exception e){
			//return retorno = new Graph(collection);
		}finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}

		return clai;
	}

	public static void WriteGraphCollection(ArrayList<Graph> collections, String path){
		FileWriter fichero = null;
		PrintWriter pw = null;

		try{
			fichero = new FileWriter(path);
			pw = new PrintWriter(fichero);
			for(int j = 0; j < collections.size(); j++){
				Graph grafo = collections.get(j);
				pw.println("{\"NameGraph\":\""+grafo.GetName()+"\",\"IdGraph\":\""+grafo.id+"\",\"DescriptionGraph\":\""+grafo.GetDescription()+"\", \"ListGraph\":");
				ArrayList<Nodes> collection = grafo.list;
				for(Integer l = 0; l < collection.size(); l++){
					Nodes nodes = collection.get(l);
					pw.println("    {\"NameTarea\":\""+nodes.GetName()+"\",\"IdTarea\":\""+nodes.id+"\",\"DescriptionTarea\":\""+nodes.GetDescription()+"\",\"MapTarea\":{");

					for(Integer i = 0; i < nodes.nodelist.size(); i++){  //bucle para ir escribiendo las subtareas
						pw.println("        {\"NameSubtarea\":\""+nodes.nodelist.get(i).GetName()+"\",\"IdSubtarea\":\""+nodes.nodelist.get(i).id+"\",\"DescSubtarea\":\""+nodes.nodelist.get(i).GetDescription()+"\"\"time\":\""+nodes.nodelist.get(i).GetTime()+"\",}");
					}
				}
			}
			pw.println("-}");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// Nuevamente aprovechamos el finally para 
				// asegurarnos que se cierra el fichero.
				if (null != fichero)
					fichero.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	//COMPROBAR->CREAR DIRECTORIOS
	public void comprobarDirectorios() {
		/*******Listado*******/
		File nuevoDir = new File("Listado");

		// Si el directorio no existe, lo creo
		if (!nuevoDir.exists()) {
			System.out.println("Creando Directorio: " + nuevoDir.getName());
			boolean result = nuevoDir.mkdir();  

			if(result) {    
				System.out.println("DIR creado");  
			}
		}
		/*******Grafos*******/
		File nuevoDirG = new File("Grafos");

		// Si el directorio no existe, lo creo
		if (!nuevoDirG.exists()) {
			System.out.println("Creando Directorio: " + nuevoDirG.getName());
			boolean result = nuevoDirG.mkdir();  

			if(result) {    
				System.out.println("DIR creado");  
			}
		}
		/*******Config*******/
		File nuevoDirC = new File("Config");

		// Si el directorio no existe, lo creo
		if (!nuevoDirC.exists()) {
			System.out.println("Creando Directorio: " + nuevoDirC.getName());
			boolean result = nuevoDirC.mkdir();  

			if(result) {    
				System.out.println("DIR creado");  
			}
		}

	}
	private static int transformarIteraciones(String iteraciones) {
		int mult = 1;
		int its = 0;
		for(int i = iteraciones.length()-1; i>= 0; --i){
			int actual = Integer.parseInt(""+iteraciones.charAt(i));
			its += actual*mult;
			mult *= 10;
		}
		return its;
	}

	public String abrirFichero(String pathFichero) {
		String retorno = "";
		/*
		 * 1 COMPROBAR QUE ES:  GRAFO, TAREA O SUBTAREA 
		 * 2 LEER EL FICHERO Y CREAR LO QUE SEA: GRAFO, TAREA O SUBTAREA 
		 * 3 USAR LA CABECERA DE LA FUNCION PARA CREAR EL OBJETO -> nodes, node, graph DEPENDIENDO DE LO QUE SEA EL PUNTO 2
		 * 4 RETORNARME UN STRING CON: "Tarea", "subtarea" o "Graph" DEPENDIENDO DEL PUNTO 2
		 */
		File archivo = null;
		FileReader fr = null;
		BufferedReader br = null;

		try {
			// Apertura del fichero y creacion de BufferedReader para poder
			// hacer una lectura comoda (disponer del metodo readLine()).
			archivo = new File (pathFichero);  /// PUEDE QUE ESTO PETE PORQUE ES RELATIVA
			fr = new FileReader (archivo);
			br = new BufferedReader(fr);

			// Lectura del fichero
			String linea = br.readLine(); // leemos la primera linea
			//System.out.println(linea);
			if(! linea.isEmpty() && linea.contains("NameTarea")){
				retorno = "TAREA";
			}
			else if(! linea.isEmpty() && linea.contains("NameGraph")){
				//System.out.println("GRAFO");
				retorno = "GRAFO";
			}
			else if(! linea.isEmpty() && linea.contains("NameSubtarea")){
				//System.out.println("SUBTAREA");
				retorno = "SUBTAREA";
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			// En el finally cerramos el fichero, para asegurarnos
			// que se cierra tanto si todo va bien como si salta 
			// una excepcion.
			try{                    
				if( null != fr ){   
					fr.close();     
				}                  
			}catch (Exception e2){ 
				e2.printStackTrace();
			}
		}
		return retorno;
	}

}
